//
//  TKIMConverseDBProtocol.h
//  TKIM_标准版
//
//  Created by liupm on 16/3/14.
//  Copyright © 2016年 liupm. All rights reserved.
//

@protocol TKIMConverseDBProtocol <NSObject>

@optional

/**
 *  @Author lpm, 16-10-10 15:10:48
 *
 *  @brief  通过聊天消息缓存一个用户会话
 *
 *  @param msg 消息
 */
-(void)insertConverseByMsg:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-11-24 18:11:13
 *
 *  @brief   异步通过聊天消息缓存一个用户会话
 *
 *  @param msg  消息
 *  @param calBack 回调返回最新会话列表
 */
-(void)insertConverseByMsg:(TKIMMessage *)msg callBack:(void(^)(NSMutableArray *array)) callBack;


/**
 *  @Author lpm, 16-10-10 15:10:56
 *
 *  @brief  通过聊天消息缓存多个用户会话
 *
 *  @param msgs 消息数组
 */
-(void)insertConversesByMsgs:(NSMutableArray *)msgs;


/**
 *  @Author lpm, 15-10-29 14:10:24
 *
 *  @brief  缓存一个会话
 *
 *  @param converse 会话
 */
-(void)insertConverse:(TKIMConverseMessage *)converse;


/**
 *  @Author lpm, 15-10-29 14:10:24
 *
 *  @brief  缓存多个会话
 *
 *  @param converse 会话数组
 */
-(void)insertConverses:(NSMutableArray *)converses;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除一个会话
 *
 *  @param converse 会话
 */
-(void)removeConverse:(TKIMConverseMessage *)converse;


/**
 *  @Author lpm, 16-10-10 15:10:37
 *
 *  @brief  删除一个会话
 *
 *  @param converse 会话
 *  @param calBack   回调返回最新会话列表
 */
-(void)removeConverse:(TKIMConverseMessage *)converse callBack:(void(^)(NSMutableArray *array)) calBack;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除多个会话
 *
 *  @param converses 会话数组
 */
-(void)removeConverses:(NSMutableArray *)converses;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新会话昵称
 *
 *  @param converse 会话 targetUser和targetUserName属性必须赋值

 */
-(void)updateConverseNickName:(TKIMConverseMessage *)converse;


/**
 *  @Author lpm, 16-10-10 15:10:07
 *
 *  @brief  通过目标用户ID查询一条会话
 *
 *  @param targetUser 目标用户ID
 *
 *  @return 会话对象
 */
-(TKIMConverseMessage *)queryAConverseByTargetUser:(NSString *)targetUser;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  根据用户昵称查询匹配的会话结果
 *
 *  @param key 关键字
 *
 *  @return 会话数组
 */
-(NSMutableArray *)queryConverseByKey:(NSString *)key;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  查询用户所有会话数据
 *
 *  @return 会话列表
 */
-(NSMutableArray *)queryConverse;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  根据用户类型查询用户所有会话数据
 *
 *  @param chatUserType 用户类型（见sdk配置文件）
 *
 *  @return 会话列表
 */
-(NSMutableArray *)queryConverseByChatUserType:(NSInteger)chatUserType;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  根据渠道类型查询用户所有会话数据
 *
 *  @param channelType 渠道类型（见sdk配置文件）
 *
 *  @return 会话列表
 */
-(NSMutableArray *)queryConverseByChannelType:(NSInteger)channelType;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  根据文件夹查询会话数据
 *
 *  @param folder 文件夹
 *
 *  @return 会话列表
 */
-(NSMutableArray *)queryConverseByFloder:(NSString *)folder;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  根据多个渠道类型查询用户所有会话数据
 *
 *  @param types 渠道类型数组（见sdk配置文件）
 *
 *  @return 会话列表
 */
-(NSMutableArray *)queryConverseInChannelTypes:(NSArray *)types;


/**
 *  @Author lpm, 15-11-04 15:11:03
 *
 *  @brief  清空会话数据
 */
-(void)clearConverse;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除一个用户的会话消息
 *
 *  @param targetUser  目标用户ID
 */
-(void)removeAConverse:(NSString *)targetUser;


/**
 *  @Author lpm, 16-11-04 17:11:30
 *
 *  @brief  删除多个用户的会话
 *
 *  @param users
 */
-(void)removeUserConverses:(NSMutableArray *)users;


/**
 *  @Author lpm, 16-11-04 17:11:48
 *
 *  @brief  删除多个群组的会话
 *
 *  @param rooms
 */
-(void)removeRoomConverses:(NSMutableArray *)rooms;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新会话置顶状态
 *
 *  @param converse 会话（isToTop，targetUser必须赋值）
 */
-(void)updateConverseIsToTop:(TKIMConverseMessage *)converse;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  清空某个会话消息数
 *
 *  @param converse 会话
 *  @param callBack 回调返回最新的会话列表
 */
-(void)resetConverseCount:(TKIMConverseMessage *)converse callBack:(void(^)(NSMutableArray *array)) calBack;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief   清空某个会话消息数
 *
 *  @param targetId  会话ID
 */
-(void)resetConverseCountById:(NSString *)targetId;


/**
 *  @Author lpm, 16-05-03 11:05:51
 *
 *  @brief  查询会话总数
 */
-(NSInteger)queryConverseTotal;


/**
 *  @Author lpm, 16-05-05 09:05:57
 *
 *  @brief  更新会话数
 *
 *  @param converse 会话（msgCount，targetUser必须赋值）
 */
-(void)updateConvserCount:(TKIMConverseMessage *)converse;


/**
 *  @Author lpm, 16-05-05 09:05:57
 *
 *  @brief  更新多个会话的消息数
 *
 *  @param converses 会话数组
 */
-(void)updateConvsersCount:(NSMutableArray *)converses;


/**
 *  @Author lpm, 16-05-05 09:05:57
 *
 *  @brief  更新会话信息（会话名，消息内容，消息类型）
 *
 *  @param converse 会话
 */
-(void)updateConverse:(TKIMMessage *)converse;


/**
 *  @Author lpm, 16-05-05 09:05:57
 *
 *  @brief  累加每个会话的消息数
 *
 *  @param converses 会话数组
 */
-(void)sumConvsersCount:(NSMutableArray *)converses;


/**
 *  @Author lpm, 16-05-05 09:05:57
 *
 *  @brief  累加每个会话的消息数
 *
 *  @param converse 会话
 */
-(void)sumConvserCount:(TKIMConverseMessage *)converse;


@end
